<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1.JS延迟加载的方式有哪些？（5）
        //把js代码写到body尾部
        // script   defer属性，实现js文件延迟加载

        // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；
         //ECMAScript---javaScript的核心，规定了js的语法规范
        //DOM--------文档对象模型(提供与网页内容交互的方法和接口)
        //BOM--------浏览器对象模型(提供与浏览器交互的方法和接口)

        // 3.JavaScript 的数据类型有哪些？
         //简单数据类型: number  String Symbol Boolean null undefined
        //复杂数据类型  Object Array function 

        // 4.如何进行数据类型的判断？
        // typeof
        // instanceof
        //Object.prototype.toString.call
        // 5.null 和 undefined 的区别？什么时候会得到 undefined？
        //  null是空对象(不存在的对象  ) //null!={}
        //  undefined 是声明了变量 未赋值 也就是未定义的

        // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？
        //   ==的意思是值相等，他们都是空值所以相等 返回true
        //   ===的意思是值相等并且数据类型也要相等，而null和undefined只是值相等，他们的类型是不相等的，
        //   所以返回false

        // 7.使用 continue 或 break 终止循环时，两种方式的区别是？
        //continue 跳出当前符合条件的流程，继续下一个流程
        //break 终止整个循环(流程)

        // 8.如何判断字符串内是否包含指定字符？
        // indexOf
        // lastIndexOf
        // includes

        // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；
         //  concat       不会修改原数组
        //    join         不会修改原数组
        //  reverse        会修改原数组
        //  indexof        不会修改原数组
        //  Lastindexof    不会修改原数组
        //  slice          不会修改原数组
        //  splice         会修改原数组
        //  includes       不会修改原数组
        //  push           会修改原数组
        //  pop            会修改原数组
        //  unshift        会修改原数组
        //  shift          会修改原数组

        // 10. var、let、const 区别？
        // var：声明的变量为全局变量
        // let：声明的变量为局部变量
        //const：不能声明同名变量


 
        // 12. 如何在 DOM2 级事件绑定上传递参数？
        // 
        // 13. 怎么阻止事件的进一步传播和默认事件？
        //使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件的进一步传播。
        // 使用event.preventDefault()可以取消默认事件。

        // 14. 如何添加一个一次性事件？

        // 15. 同步和异步的区别?
        //同步的思想是：所有的操作都做完，才返回给用户。这样用户在线等待的时间太长，给用户一种卡死了的感觉（就是系统迁移中，点击了迁移，界面就不动了，但是程序还在执行，卡死了的感觉）。这种情况下，用户不能关闭界面，如果关闭了，即迁移程序就中断了。

        //异步：将用户请求放入消息队列，并反馈给用户，系统迁移程序已经启动，你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉，会告诉你，你的请求系统已经响应了。你可以关闭界面了。
               
        // 16. AJAX是什么？AJAX是如何为页面注入灵魂？
        //ajax作用：是一种在无需刷新加载整个网页的情况下，能够更新部分网页内容的技术

        // 17. 开发阶段的 AJAX 跨域有哪些解决方法，jsonp 的原理是什么
        //CORS跨域（CORS跨域是w3C提出，它定义了在跨域访问资源时服务器和浏览器之间的通信，CORS定义在http请求头允许浏览器和服务器之间的通信）
        //后端解决跨域(后端设置响应头，设置白名单)：Access-Control-Allow-Origin："指定的域名地址"||*
        //jsonp 原理：利用script的src属性，不考虑跨域问题 
        // 18. 请描述一下cookies，sessionStorage和localStorage的区别
        //特点：可以设置cookie过期时间，限制大小为4kb左右，超出部分会被裁切
        //local storage     本地存储 ：用于长久保留整个网页的数据，保存的数据没有过期时间。
        //session storage 会话存储 用于保存临时同一个窗口的数据，关闭窗口之后数据就会被删除
        // 19. 讲一下常见的异步场景，以及传统异步的诟病和解决方案

        // 20. 数组如何实现去重？请提供至少2种方法
        //indexOf() 方法：返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现，则该方法返回 -1。
        //建一个空Map数据结构，遍历需要去重的数组，把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值，所以最终得到的就是去重后的结果。

        // 21. 讲一下对基本数据类型 和 复杂/引用数据类型的理解？

        // 22. this 的指向如何确定？
        //当一个函数是直接使用不带任何修饰的函数引用进行调用的，那么就是默认绑定，函数内的this指向的就是全局对象。

        // 23. 谈谈对垃圾回收机制的认识
        // 24. 什么是回流重绘，如何进行优化？
        //：当render tree的一部分或者全部元素因改变了自身的宽高，布局，显示或隐藏，或元素内部的文字结构发生变化，导致需要重新构建页面的时候，回流就产生了。
        // 当一个元素自身的宽高，布局，及显示或隐藏没有改变，而只是改变了元素的外观风格的时候，就产生了重绘。
        // 25. 请解释什么是事件代理
        //事件代理的实现原理是利用冒泡和目标元素，把处理的事件添加到父元素，等待子元素事件的冒泡，并且可以通过父元素event.target判断哪个是子元素，从而做出处理

        // 26. 谈谈你对渐进增强和优雅降级的理解(补充)
    </script>
</body>

</html>